package cn.zhfeat.hatch.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import cn.zhfeat.core.base.BaseServiceImpl;
import cn.zhfeat.core.shiro.bean.ShiroSysAuthorityBean;
import cn.zhfeat.hatch.dao.sysuser.ISysAuthorityMapper;
import cn.zhfeat.hatch.dao.sysuser.ISysUserAttributeMapper;
import cn.zhfeat.hatch.dao.sysuser.ISysUserMapper;
import cn.zhfeat.hatch.dao.sysuser.ISysUserRoleMapper;
import cn.zhfeat.hatch.dto.sysuser.SysAuthorityDto;
import cn.zhfeat.hatch.dto.sysuser.SysUserDto;
import cn.zhfeat.hatch.dto.sysuser.SysUserRoleDto;
import cn.zhfeat.hatch.entity.sysuser.SysUser;
import cn.zhfeat.hatch.entity.sysuser.SysUserAttribute;
import cn.zhfeat.hatch.entity.sysuser.SysUserRole;
import cn.zhfeat.hatch.service.ISysUserService;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;


/**
 * @description: 用户相关信息
 *
 * @author Yangcl
 * @date 2018年5月2日 下午5:50:46 
 * @version 1.0.0.1
 */
@Service("sysUserService") 
public class SysUserServiceImpl extends BaseServiceImpl<SysUser, SysUserDto, Long> implements ISysUserService {

	@Resource
	private ISysUserMapper sysUserMapper;
	
	@Resource
	private ISysUserRoleMapper sysUserRoleMapper;
	
	@Resource
	private ISysUserAttributeMapper sysUserAttributeMapper;
	
	@Resource
	private ISysAuthorityMapper sysAuthorityMapper;
	
	/**
	 * @description: 名片列表页 - 新建名片 - 弹框列表 - 分页数据
	 *
	 * @param dto
	 * @author Yangcl
	 * @date 2018年5月3日 上午11:54:14 
	 * @version 1.0.0.1
	 */
	public PageInfo<SysUser> dialogAjaxPageListByDto(SysUserDto dto) {
		Integer startIndex = dto.getStartIndex(); 		// 当前第几页
		Integer pageSize = dto.getPageSize(); 			// 当前页所显示记录条数
		int num = 1;
		int size = 10;
		if (startIndex != null) {
			num = startIndex;
		}
		if (pageSize != null) {
			size = pageSize;
		}

		PageHelper.startPage(num, size);
		List<SysUser> list = sysUserMapper.dialogAjaxPageListByDto(dto); 
		if (list != null && list.size() > 0) {
			PageInfo<SysUser> page = new PageInfo<SysUser>(list);
			return page;
		} 
		return null;
	}


	/**
	 * @description: 根据Long userId 查询用户角色关联信息|查询条件不符则返回null
	 * 原方法:public List<SysUserRole> selectUserRoles(Long userId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午1:42:06 
	 * @version 1.0.0.1
	 */
	@Override
	public List<SysUserRole> selectSysUserRoles(SysUserRoleDto dto) {
		return sysUserRoleMapper.selectSysUserRoles(dto);
	}

	
	/**
	 * @description: 根据用户id更新用户角色对应关系，如果用户id为null或updateTime为null则返回0，标识更新失败
	 *		逻辑删除也调用此方法。
	 * 原方法:public Boolean deleteUserRoles(Long userId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午1:50:14 
	 * @version 1.0.0.1
	 */
	@Override
	public Integer updateSysUserRolesByType(SysUserRoleDto dto) {
		return sysUserRoleMapper.updateSysUserRolesByType(dto);
	}

	
	/**
	 * @description: 增加用户和角色的对应关系并返回自增ID
	 * 原方法:public Boolean createUserRole(SysUserRole sysUserRole);
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午2:24:24 
	 * @version 1.0.0.1
	 */
	@Override
	public int insertUserRoles(SysUserRole entity) {
		return sysUserRoleMapper.insertSelective(entity);
	}

	
	/**
	 * @description: 用户概要信息查询接口 - 查询用户、角色、部门
	 * 原方法:public Map<String, Object> selectSysUserDetail(Long id) 
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午4:51:54 
	 * @version 1.0.0.1
	 */
	@Override
	public SysUser findUserInfoForDetailByDto(SysUserDto dto) {
		return sysUserMapper.findUserInfoForDetailByDto(dto);
	}
	
	/**
	 * @description: 查询用户对应的一组数据特征属性
	 *
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月10日 下午1:23:00 
	 * @version 1.0.0.1
	 */
	@Override
	public List<SysUser> findUserAttributeByDto(SysUserDto dto) {
		return sysUserMapper.findUserAttributeByDto(dto);
	}

	
	/**
	 * @description:增加用户对应的数据特征属性 
	 *
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月10日 下午1:27:33 
	 * @version 1.0.0.1
	 */
	@Override
	public int inserttUserAttribute(SysUserAttribute entity) {
		return sysUserAttributeMapper.insertSelective(entity);
	}


	/**
	 * @description: 更新用户对应的数据特征属性
	 *
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月10日 下午1:29:25 
	 * @version 1.0.0.1
	 */
	@Override
	public Integer updateUserAttribute(SysUserAttribute entity) {
		return sysUserAttributeMapper.updateByPrimaryKey(entity);
	}


	/**
	 * @description: 菜单使用的临时方法
	 *
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月20日 下午2:31:52 
	 * @version 1.0.0.1
	 */
	@Override
	public List<ShiroSysAuthorityBean> findMenuListByDto(SysAuthorityDto dto) {
		return sysAuthorityMapper.findMenuListByDto(dto);
	}


	@Override
	public List<SysUser> userListByLikeName(SysUserDto dto) {
		return sysUserMapper.userListByLikeName(dto);
	}

	
	
}
